{
    // function fn(value: number): number { return value }

    // fn(false)

    // function fn(value: string): string { return value }
    // function fn(value: boolean): boolean { return value }
    
    // 泛型：参数化类型
    // 类，接口，函数

    // function fn(value: string): string { return value }


    // 1. 定义泛型函数
    // T 表示类型变量
    function fn<T>(value: T): T { return value }

    // 2. 调用泛型函数
    let res1 = fn(100)
    
    let res2 = fn<boolean>(false)

    // const [x, SetX] = useState(10)
    // useState([])

}

{
    // useState它接收一个任意类型的数据，返回一个数组。
    // 数组的第一个元素的类型与入参一致； 
    // 数组的第二个元素是一个函数
    //     函数的入参类型和返回值类型与useState的入参一致
    // react 
    // const [num, setNum] = useState(0)
    // const [str, setStr] = useState('ab')

    function useState<Type>(value:Type): [Type, (val:Type)=>Type] {
        const setValue = (val: Type) => {
            return val
        }

        return [value, setValue]
    }

    const [str, setStr] = useState<string>('123')

    const [num, setNum] = useState<number>(123)
}
